<?php

    $files =[];
    ini_set('memory_limit','500M');
    
    function getDir($dir){
        global $files;
        $hd=scandir($dir);
        foreach ($hd as $val) {
            $sub_dir = $dir."/".$val;
            if($val=="." || $val== ".."){
                continue;
            }elseif(is_dir($sub_dir)){
                getDir($sub_dir);
            }else{
                array_push($files, $sub_dir);
            }
        }
        return $files;
    }
    
    $dir = __DIR__ . "/uploads/images";
    $info = getDir($dir);
    foreach($info as $k=>$file){
        $tmpPath="D:/img/";
        $arr = pathinfo($file);
        
        getNewFile($file,$tmpPath);
        echo "file [$file] is finish".PHP_EOL;
    }
 
    function getNewFile($filepath,$tmpPath){
        $imgInfo = getimagesize($filepath);
        $width = $imgInfo[0];//width
        $height = $imgInfo[1];//height
        $fileName = pathinfo($filepath)['basename'];
        $tmpFilePath = $tmpPath."/".$fileName;
        getThumb($filepath,$width,$height,$tmpFilePath);
    }
    
    function resizeImage($im, $dest, $maxwidth, $maxheight) {
        $img = getimagesize($im);
        switch ($img[2]) {
             case 1:
              $im = @imagecreatefromgif($im);
              break;
             case 2:
              $im = @imagecreatefromjpeg($im);
              break;
             case 3:
              $im = @imagecreatefrompng($im);
              break;
        }
       
        $pic_width = imagesx($im);
        $pic_height = imagesy($im);
        $resizewidth_tag = false;
        $resizeheight_tag = false;
        if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
        if ($maxwidth && $pic_width > $maxwidth) {
          $widthratio = $maxwidth / $pic_width;
          $resizewidth_tag = true;
         }
       
        if ($maxheight && $pic_height > $maxheight) {
          $heightratio = $maxheight / $pic_height;
          $resizeheight_tag = true;
        }
       
        if ($resizewidth_tag && $resizeheight_tag) {
          if ($widthratio < $heightratio)
          $ratio = $widthratio;
          else
          $ratio = $heightratio;
        }
         if ($resizewidth_tag && !$resizeheight_tag)
          $ratio = $widthratio;
         if ($resizeheight_tag && !$resizewidth_tag)
          $ratio = $heightratio;
         $newwidth = $pic_width * $ratio;
         $newheight = $pic_height * $ratio;
       
         if (function_exists("imagecopyresampled")) {
          $newim = imagecreatetruecolor($newwidth, $newheight);
          imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
         } else {
          $newim = imagecreate($newwidth, $newheight);
          imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
         }
       
        imagejpeg($newim, $dest);
        imagedestroy($newim);
        } else {
            imagejpeg($im, $dest);
        }
    }
    
    /**
     * 图片压缩处理
     * @param string $sFile 源图片路径
     * @param int $iWidth 自定义图片宽度
     * @param int $iHeight 自定义图片高度
     * @return string 压缩后的图片路径
     */
    function getThumb($sFile,$iWidth,$iHeight,$tmpFilePath){
        //图片公共路径
        $public_path = '';
        //判断该图片是否存在
        if(!file_exists($public_path.$sFile)) return $sFile;
        //判断图片格式(图片文件后缀)
        $extend = explode("." , $sFile);
        $attach_fileext = strtolower($extend[count($extend) - 1]);
        if (!in_array($attach_fileext, array('jpg','png','jpeg'))){
        return '';
        }
        //压缩图片文件名称
        $sFileNameS = str_replace(".".$attach_fileext, "_".$iWidth.'_'.$iHeight.'.'.$attach_fileext, $sFile);
        //判断是否已压缩图片，若是则返回压缩图片路径
        if(file_exists($public_path.$sFileNameS)){
        return $sFileNameS;
        }
        //生成压缩图片，并存储到原图同路径下
        // resizeImage($public_path.$sFile, $public_path.$sFileNameS, $iWidth, $iHeight);
        resizeImage($public_path.$sFile,$tmpFilePath, $iWidth, $iHeight);
        if(!file_exists($public_path.$sFileNameS)){
        return $sFile;
        }
        return $sFileNameS;
    }

?>
